//给你一个字符串数组 words ，只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。 
//
// 美式键盘 中： 
//
// 
// 第一行由字符 "qwertyuiop" 组成。 
// 第二行由字符 "asdfghjkl" 组成。 
// 第三行由字符 "zxcvbnm" 组成。 
// 
//
// 
//
// 
//
// 示例 1： 
//
// 
//输入：words = ["Hello","Alaska","Dad","Peace"]
//输出：["Alaska","Dad"]
// 
//
// 示例 2： 
//
// 
//输入：words = ["omk"]
//输出：[]
// 
//
// 示例 3： 
//
// 
//输入：words = ["adsdf","sfd"]
//输出：["adsdf","sfd"]
// 
//
// 
//
// 提示： 
//
// 
// 1 <= words.length <= 20 
// 1 <= words[i].length <= 100 
// words[i] 由英文字母（小写和大写字母）组成 
// 
// Related Topics 数组 哈希表 字符串 👍 211 👎 0


import java.util.ArrayList;
import java.util.List;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public String[] findWords(String[] words) {
        List<String> list = new ArrayList<>();
        int[] wordMapping = new int[]{2, 3, 3, 2, 1, 2, 2, 2, 1, 2, 2, 2, 3, 3, 1, 1, 1, 1, 2, 1, 1, 3, 1, 3, 1, 3};
        for (int i = 0; i < words.length; i++) {
            String clean = words[i];
            String word = words[i].toLowerCase();
            char[] toCharArray = word.toCharArray();
            int row = wordMapping[toCharArray[0] - 97];
            boolean flag = false;
            for (int j = 0; j < toCharArray.length; j++) {
                if (wordMapping[toCharArray[j] - 97] != row) {
                    flag = true;
                    break;
                }
            }
            if (!flag) {
                list.add(clean);
            }
        }
        return list.toArray(new String[]{});
    }
}
//leetcode submit region end(Prohibit modification and deletion)
